<template>
  <div class="table">
      <div class="container">
        <div class="handle-box">
            <el-input class="handle-input" v-model="select_word" size="mini" placeholder="筛选相关用户"></el-input>
            <el-button type="primary" size="mini" @click="centerDialogVisible = true">添加用户</el-button>
            <el-button type="danger" size="mini" @click="delAll">批量删除</el-button>
        </div>
      </div>
       <el-table size="mini" ref="multipleTable" border style="width:100%" height="600px" :data="data" @selection-change="handleSelectionChange">
            <el-table-column  type="selection" width="40"></el-table-column>
            <el-table-column label="用户头像" width="110" align="center">
                <template slot-scope="scope"> 
                    <div class="consumer-img">
                        <img :src="getUrl(scope.row.avator)" style="width:100%"/>
                    </div>
                    <el-upload :action="uploadUrl(scope.row.id)" :before-upload="beforeAvatorUpload" 
                        :on-success="handleAvatorSuccess">
                        <el-button size="mini">更新图片</el-button>
                    </el-upload>
                </template>
            </el-table-column>
             <el-table-column prop="username" label="用户名" width="120" align="center"></el-table-column>
             <el-table-column label="性别" width="50" align="center">
                <template slot-scope="scope">
                    {{changeSex(scope.row.sex)}}
                </template>
            </el-table-column>
            <el-table-column prop="phoneNum" label="手机号码" width="120" align="center"></el-table-column>
            <el-table-column prop="email" label="电子邮箱" width="240" align="center"></el-table-column>
            <el-table-column label="生日" width="120" align="center">
                <template slot-scope="scope">
                    {{attachBirth(scope.row.birth)}}
                </template>
            </el-table-column>
            <el-table-column prop="introduction" label="签名" align="center"></el-table-column>
            <el-table-column prop="location" label="地区" width="100" align="center"></el-table-column>    
            <el-table-column label="收藏" width="100" align="center">
                <template slot-scope="scope">
                    <el-button type="info" round size="mini" @click="getCollect(data[scope.$index].id)">收藏歌曲</el-button>
                </template>
            </el-table-column>  
            <el-table-column label="操作" width="150" align="center">
              <template slot-scope="scope">
                  <el-button size="mini" type="primary" round @click="handleEdit(scope.row)">编辑</el-button>
                  <el-button size="mini" type="danger" @click="handleDelete(scope.row.id)">删除</el-button>
              </template>
            </el-table-column>
        </el-table>
        <div class="pagenation">
            <el-pagination
            background
            layout="total,prev,pager,next"
            :total="tableData.length" 
            :current-page="currentPage" 
            :page-size="pageSize" 
            @current-change="handleCurrentChange" ></el-pagination>
        </div>
      <el-dialog title="添加新用户" :visible.sync="centerDialogVisible" width="400px" center>
          <el-form :model="registerForm" ref="registerForm" label-width="80px" :rules="rules">
              <el-form-item prop="username" label="用户名" size ="mini">
                <el-input v-model="registerForm.username" placeholder="用户名"></el-input>
              </el-form-item>
              <el-form-item prop="password" label="密码" size="mini">
                    <el-input type="password" v-model="registerForm.password" placeholder="请输入密码"></el-input>
              </el-form-item>
              <el-form-item label="性别" size="mini">
                    <input type="radio" name="sex" value="0" v-model="registerForm.sex">&nbsp;女&nbsp;&nbsp;
                    <input type="radio" name="sex" value="1" v-model="registerForm.sex">&nbsp;男
              </el-form-item>
              <el-form-item prop="phoneNum" label="手机号码" size="mini">
                    <el-input v-model="registerForm.phoneNum" placeholder="请输入11位的手机号"></el-input>
              </el-form-item>
              <el-form-item prop="email" label="电子邮箱" size="mini">
                    <el-input v-model="registerForm.email" placeholder="电子邮箱：请使用正确的邮箱格式"></el-input>
              </el-form-item>
              <el-form-item prop="birth" label="生日" size="mini">
                    <el-date-picker type="date" placeholder="选择日期" v-model="registerForm.birth" style="width:100%"></el-date-picker>
              </el-form-item>
              <el-form-item prop="introduction" label="签名" size="mini">
                    <el-input v-model="registerForm.introduction" placeholder="签名"></el-input>
              </el-form-item>      
              <el-form-item prop="location" label="地区" size="mini">
                    <el-input v-model="registerForm.location" placeholder="地区：xx省xx市"></el-input>
              </el-form-item>         
          </el-form>
          <span slot="footer">
            <el-button type="warning" size="mini" round @click="centerDialogVisible = false">取消</el-button>
            <el-button type="primary" size="mini" round @click="addConsumer">确定</el-button>
          </span>
      </el-dialog>
      <el-dialog title="修改用户" :visible.sync="editVisible" width="400px" center>
          <el-form :model="editForm" ref="editForm" label-width="80px" :rules="rules">
              <el-form-item prop="username" label="用户名" size ="mini">
                <el-input v-model="editForm.username" placeholder="用户名"></el-input>
              </el-form-item>
              <el-form-item prop="password" label="密码" size="mini">
                    <el-input type="password" v-model="editForm.password" placeholder="密码"></el-input>
              </el-form-item>
              <el-form-item label="性别" size="mini">
                    <input type="radio" name="sex" value="0" v-model="editForm.sex">&nbsp;女&nbsp;&nbsp;
                    <input type="radio" name="sex" value="1" v-model="editForm.sex">&nbsp;男
              </el-form-item>
              <el-form-item prop="phoneNum" label="手机号码" size="mini">
                    <el-input v-model="editForm.phoneNum" placeholder="手机号"></el-input>
              </el-form-item>
              <el-form-item prop="email" label="电子邮箱" size="mini">
                    <el-input v-model="editForm.email" placeholder="电子邮箱"></el-input>
              </el-form-item>
              <el-form-item prop="birth" label="生日" size="mini">
                    <el-date-picker type="date" placeholder="选择日期" v-model="editForm.birth" style="width:100%"></el-date-picker>
              </el-form-item>
              <el-form-item prop="introduction" label="签名" size="mini">
                    <el-input v-model="editForm.introduction" placeholder="签名"></el-input>
              </el-form-item>      
              <el-form-item prop="location" label="地区" size="mini">
                    <el-input v-model="editForm.location" placeholder="地区"></el-input>
              </el-form-item> 
          </el-form>
          <span slot="footer">
            <el-button type="" size="mini" @click="editVisible = false">取消</el-button>
            <el-button type="primary" size="mini" @click="editSave">确定</el-button>
          </span>
    </el-dialog>
    <el-dialog title="删除用户" :visible.sync="delVisible" width="300px" center>     
        <div align="center">一经删除，不可恢复！请确认是否删除？</div>   
          <span slot="footer">
            <el-button type="" size="mini" @click="delVisible = false">取消</el-button>
            <el-button type="" size="mini" @click="deleteRow">确定</el-button>
          </span>
    </el-dialog>
    <el-dialog title="批量删除用户" :visible.sync="delAllVisible" width="300px" center>     
        <div align="center">一经删除，不可恢复！请确认是否删除？</div>   
          <span slot="footer">
            <el-button type="" size="mini" @click="delAllVisible = false">取消</el-button>
            <el-button type="" size="mini" @click="deleteRow">确定</el-button>
          </span>
    </el-dialog>
  </div>
</template>

<script>
import {getAllConsumer,setConsumer,updateConsumer,delConsumer} from "../api/index";
import {mixin} from "../mixins/index";
export default {
  mixins: [mixin],
  data(){
    return{
      centerDialogVisible: false,   //添加弹框是否显示
      editVisible: false,           //操作弹框是否显示
      delVisible: false,            //删除弹窗是否显示
      delAllVisible: false,         //批量删除弹窗是否显示
            registerForm:{      //添加框
                username: '',
                password: '',
                sex: '1',
                phoneNum: '',
                email: '',
                birth: '',
                introduction: '',
                location: ''
            },
            editForm:{      //编辑框
                id: '',
                username: '',
                password: '',
                sex: '',
                phoneNum: '',
                email: '',
                birth: '',
                introduction: '',
                location: ''
            },
      tableData: [],    //el-table数据
      tempData: [],     //查询事件发生时要展示的数据你需要for循环展示的数据
      select_word: '',  //input绑定的查询关键词
      pageSize: 4,      //分页每页的大小
      currentPage: 1,   //当前页
      idx: -1,          //当前选择的用户（单项删除）
      multipleSelection: [],    //选中了什么用户项
      rules: {
                username: [
                    {required: true,message: '请输入用户名',trigger: 'blur'}
                ],
                password: [
                    {required: true,message: '请输入密码',trigger: 'blur'}
                ],
                phoneNum: [
                    {required: true,message: '请输入手机号',trigger: 'blur'}
                ],
                email: [
                    {required: true,message: '请输入电子邮箱',trigger: 'blur'},
                    {type: 'email',message:'请输入正确的电子邮箱地址',trigger:['blur','change']}
                ],
                introduction: [
                    {required: true,message: '请输入签名',trigger: 'blur'}
                ],
                location: [
                    {required: true,message: '请输入地区',trigger: 'blur'}
                ]                
            },
    }
  },
  computed: {
    //计算当前搜索结果表里的数据
    data() {
      return this.tableData.slice((this.currentPage -1) * this.pageSize,this.currentPage * this.pageSize)
    },
  
  },
  watch: {
    //搜索框里的内容发生变化时候，搜索结果table列表的内容跟着发生变化
    select_word: function(){
      if(this.select_word == ''){
        this.tableData = this.tempData;
      }else{
        this.tableData = [];
        for(let item of this.tempData){
          if(item.username.includes(this.select_word)){
            this.tableData.push(item);
          }
        }
      }
    },
    
  },
  created(){
        this.getData();
    },
  methods: {
    //获取当前页
        handleCurrentChange(val){
            this.currentPage = val;
        },
     //查询所有用户
        getData(){
            this.tempData = [];
            this.tableData = [];
            getAllConsumer().then(res => {             
                this.tableData = res;
                this.tempData = res;
                this.currentPage = 1;
            })
        },
     //添加用户
        addConsumer(){
          this.$refs['registerForm'].validate(valid =>{
            if(valid){
                  let d = this.registerForm.birth;
                  let datetime = d.getFullYear()+'-'+(d.getMonth()+1)+'-'+d.getDate();
                  let params = new URLSearchParams();
                  params.append('username',this.registerForm.username);
                  params.append('password',this.registerForm.password);
                  params.append('sex',this.registerForm.sex);
                  params.append('phoneNum',this.registerForm.phoneNum);            
                  params.append('email',this.registerForm.email);
                  params.append('birth',datetime);
                  params.append('introduction',this.registerForm.introduction);
                  params.append('location',this.registerForm.location);
                  params.append('avator','/img/consumerPic/userAvator.jpg');
                  setConsumer(params)
                  .then(res => {
                    if(res.code == 1){
                    this.getData();
                    this.notify("添加成功","success");
                  }else{
                    this.notify("添加失败","error");
                  }
            })
            .catch(err => {
                console.log(err);
            });
            this.centerDialogVisible = false;
            }
          })
        },
        //修改用户，弹出编辑页面
        handleEdit(row){
          this.editVisible = true;
          this.editForm = {
            id: row.id,
            username: row.username,
            password: row.password,
            sex: row.sex,
            phoneNum: row.phoneNum,
            email: row.email,
            birth: row.birth,
            introduction: row.introduction,
            location: row.location
          }
        },
        //保存编辑页面,修改用户
        editSave(){
          this.$refs['editForm'].validate(valid =>{
            if(valid){
                let d = new Date(this.editForm.birth);
                let datetime = d.getFullYear()+'-'+(d.getMonth()+1)+'-'+d.getDate();
                let params = new URLSearchParams();
                params.append('id',this.editForm.id);
                params.append('username',this.editForm.username);
                params.append('password',this.editForm.password);
                params.append('sex',this.editForm.sex);
                params.append('phoneNum',this.editForm.phoneNum);
                params.append('email',this.editForm.email);
                params.append('birth',datetime);
                params.append('introduction',this.editForm.introduction);
                params.append('location',this.editForm.location);
                updateConsumer(params)
                .then(res => {
                    if(res.code == 1){
                      this.getData();
                      this.notify("修改成功","success");
                    }else{
                      this.notify("修改失败","error");
                    }
                })
                .catch(err => {
                    console.log(err);
                });
                this.editVisible = false;
              }
          })
        },
        //删除用户
        deleteRow(){
          delConsumer(this.idx)
          .then(res => {
                if(res){
                  this.getData();
                  this.notify("删除成功","success");
                }else{
                  this.notify("删除失败","error");
                }
            })
            .catch(err => {
                console.log(err);
            });
            this.delVisible = false;
        },
        
        //更新图片
        uploadUrl(id){
            return `${this.$store.state.HOST}/consumer/updateConsumerPic?id=${id}`
        },
        //转向该用户的收藏列表
        getCollect(id){
            this.$router.push({path: '/collect',query:{id}})
        }
  },
}
</script>

<style scoped>
  .handle-box{
    margin-bottom: 20px;
    display: flex;
    justify-content: flex-end;
  }
   .consumer-img{
        width: 100%;
        height: 80px;
        border-radius: 5px;
        margin-bottom: 5px;
        overflow: hidden;
    }
    .handle-input{
      width: 300px;
      display: inline-block;
    }
    .pagenation{
      display: flex;
      justify-content: center;
    }
</style>